package org.seamon.management.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.seamon.management.pojo.dto.ResetPwdDto;
import org.seamon.management.pojo.dto.UserInsertDto;
import org.seamon.management.pojo.dto.UserListDto;
import org.seamon.management.pojo.dto.UserUpdateDto;
import org.seamon.management.pojo.entity.User;
import org.seamon.management.pojo.vo.UserDetailVo;
import org.seamon.management.pojo.vo.UserListVo;
import org.seamon.management.util.exception.BusinessException;
import org.springframework.security.core.userdetails.UserDetailsService;

import javax.validation.Valid;

/**
* @author Simon
* @description 针对表【sys_user(用户/员工表)】的数据库操作Service
* @createDate 2025-07-11 00:31:54
*/
public interface UserService extends IService<User>, UserDetailsService {
    /**
     * 获取用户列表
     *
     * @param dto
     * @return
     */
    Page<UserListVo> listUser(UserListDto dto);

    /**
     * 获取用户详细信息
     *
     * @param id
     * @return
     */
    UserDetailVo getUserById(Long id);

    /**
     * 保存用户
     *
     * @param dto
     * @return
     */
    void saveUser(UserInsertDto dto);

    /**
     * 更新用户
     *
     * @param dto
     * @return
     */
    void updateUser(@Valid UserUpdateDto dto);

    /**
     * 删除用户
     *
     * @param id
     * @return
     */
    void removeUserById(Long id);

    /**
     * 重置密码
     *
     * @param dto
     * @return
     */
    void resetPwd(@Valid ResetPwdDto dto) throws BusinessException;

    /**
     * 查询用户名是否存在
     *
     * @param username
     * @return
     */
    boolean existsByUsername(String username);

    /**
     * 根据用户名查询用户
     *
     * @param username
     * @return
     */
    User getByUsername(String username);

    /**
     * 更新用户登录时间
     *
     * @param username
     */
    void updateLoginTime(String username);
}
